www.gusucode.com > vc++ 远程控制示例源程序-源码程序 > vc++ 远程控制示例源程序-源码程序\code\PeerYouS\PeerSystemInit.cpp

    // PeerSystemInit.cpp: implementation of the PeerSystemInit
// Download by http://www.NewXing.com
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "PeerSystemInit.h"
#include "command.h"

bool GetPeerSystemInfo(SYSTEMINIT& sysinfo)
{
	/////get computer name///////
	TCHAR computerbuf[256];
	DWORD computersize=256;
	memset(computerbuf,0,256);
	if(!GetComputerName(computerbuf,&computersize))
		return false;
	computerbuf[computersize]=0;
	sysinfo.computer[0]=0;
	strcat(sysinfo.computer,"计算机: ");
	strcat(sysinfo.computer,computerbuf);
	///////get user name/////////
	TCHAR userbuf[256];
	DWORD usersize=256;
	memset(userbuf,0,256);
	if(!GetUserName(userbuf,&usersize))
		return false;
	userbuf[usersize]=0;
	sysinfo.user[0]=0;
	strcat(sysinfo.user,"用户名: ");
	strcat(sysinfo.user,userbuf);
	///////get version//////////
	sysinfo.os[0]=0;
	strcat(sysinfo.os,"操作系统: ");
	OSVERSIONINFO osvi;
	memset(&osvi,0,sizeof(osvi));
	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	if(!GetVersionEx(&osvi))
		return false;
	switch (osvi.dwPlatformId)
	{
      case VER_PLATFORM_WIN32_NT:
          if ( osvi.dwMajorVersion <= 4 )
			 strcat(sysinfo.os,"Microsoft Windows NT ");
         if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
			 strcat(sysinfo.os,"Microsoft Windows 2000 ");
         HKEY hKey;
         char szProductType[80];
         DWORD dwBufLen;
         RegOpenKeyEx( HKEY_LOCAL_MACHINE,
               "SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
               0, KEY_QUERY_VALUE, &hKey );
         RegQueryValueEx( hKey, "ProductType", NULL, NULL,
               (LPBYTE)szProductType, &dwBufLen);
         RegCloseKey(hKey);
         if ( lstrcmpi( "WINNT", szProductType) == 0 )
			 strcat(sysinfo.os,"Professional, " );
         if ( lstrcmpi( "LANMANNT", szProductType) == 0 )
             strcat(sysinfo.os,"Server, " );
         if ( lstrcmpi( "SERVERNT", szProductType) == 0 )
             strcat(sysinfo.os,"Advanced Server, " );
         if ( osvi.dwMajorVersion <= 4 )
         {
			 char temp[256];
			 sprintf(temp,"version %d.%d %s (Build %d)\n",
               osvi.dwMajorVersion,
               osvi.dwMinorVersion,
               osvi.szCSDVersion,
               osvi.dwBuildNumber & 0xFFFF);
			 strcat(sysinfo.os,temp);
         }
         else
         { 
			 char temp[256];
             sprintf(temp,"%s (Build %d)\n",
               osvi.szCSDVersion,
               osvi.dwBuildNumber & 0xFFFF);
			 strcat(sysinfo.os,temp);
         }
         break;
      case VER_PLATFORM_WIN32_WINDOWS:
         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
         {
             strcat(sysinfo.os,"Microsoft Windows 95 ");
             if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
                strcat(sysinfo.os,"OSR2 " );
         } 

         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
         {
             strcat(sysinfo.os,"Microsoft Windows 98 ");
             if ( osvi.szCSDVersion[1] == 'A' )
                strcat(sysinfo.os,"SE " );
         } 

         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
         {
             strcat(sysinfo.os,"Microsoft Windows Millennium Edition ");
         } 
         break;
    }
	///////////get disk space/////////////
	sysinfo.disk[0]=0;
	strcat(sysinfo.disk,"磁盘空间: ");
	DWORD maskdriver;
	ULONGLONG totalspace=0,freespace=0;
	ULONGLONG ulltotalspace,ullfreespace,freebyte;
	DWORD drivertype;
	char driver[10];
	if(!(maskdriver=GetLogicalDrives()))
		return false;
	for(int i=0;i<26;i++)
	{
		if(!(maskdriver>>i))
			break;
		if(maskdriver>>i&1)
		{
			driver[0]=i+'A';
			driver[1]=':';
			driver[2]='\\';
			driver[3]=0;
			drivertype=GetDriveType(driver);
			if(drivertype!=DRIVE_FIXED)
				continue;
			if(!GetDiskFreeSpaceEx (driver,
							(PULARGE_INTEGER)&freebyte,
							(PULARGE_INTEGER)&ulltotalspace,
							(PULARGE_INTEGER)&ullfreespace))
							return false;
			totalspace+=ulltotalspace;
			freespace+=ullfreespace;
		}
	}
	signed __int64 dfreespace=0.0,dtotalspace=0.0,lv;
	dfreespace=(signed __int64)freespace/(1024*1024*1024);
	dtotalspace=(signed __int64)totalspace/(1024*1024*1024);
	lv=(signed __int64)freespace/totalspace*100;
	char space[256];
	sprintf(space,"总磁盘空间为:%.2fG,剩余磁盘空间为:%.2fG(占%.2f%c)",dtotalspace,dfreespace,lv,'%');
	strcat(sysinfo.disk,space);
	////////////////get cpu info//////////////////
	sysinfo.processor[0]=0;
	strcat(sysinfo.processor,"CPU: ");
	HKEY hKey;
	char szcpuinfo[80];
	DWORD dwBufLen=80;
	RegOpenKeyEx( HKEY_LOCAL_MACHINE,
	   "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",
	   0, KEY_QUERY_VALUE, &hKey );
	RegQueryValueEx( hKey, "VendorIdentifier", NULL, NULL,
	   (LPBYTE)szcpuinfo, &dwBufLen);
	szcpuinfo[dwBufLen]=0;
	strcat(sysinfo.processor,szcpuinfo);
	strcat(sysinfo.processor," ");
	memset(szcpuinfo,0,80);
	dwBufLen=80;
	RegQueryValueEx( hKey, "Identifier", NULL, NULL,
	   (LPBYTE)szcpuinfo, &dwBufLen);
	szcpuinfo[dwBufLen]=0;
	strcat(sysinfo.processor,szcpuinfo);
	DWORD f;
	dwBufLen=8;
	RegQueryValueEx( hKey, "~MHz", NULL, NULL,
	   (LPBYTE)&f, &dwBufLen);
	char hz[10];
	sprintf(hz," %dMHZ",f);
	strcat(sysinfo.processor,hz);
	RegCloseKey(hKey);
	/////////////get mem size////////////
	MEMORYSTATUS ms;
	GlobalMemoryStatus(&ms);
	char membuf[256];
	sprintf(membuf,"物理内存: 总物理内存:%dMB,可用内存:%dMB (占%.2f%s)",ms.dwTotalPhys/1024/1024,ms.dwAvailPhys/1024/1024
		,(double)ms.dwAvailPhys/ms.dwTotalPhys*100,"%");
	sysinfo.mem[0]=0;
	strcpy(sysinfo.mem,membuf);
	return true;
}